﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.View;
using SIIE_ERP.Codigo;
using SIIE_ERP.BaseDatos.Configuracion;
using System.Data;
using SIIE_ERP.BaseDatos;

namespace Elysium.Demo.Configuracion
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class Usuarios_Alta : UserControl, IPropiedadesNavegacion
    {
        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;

        public Usuarios_Alta(UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;
            CargaCatalogos();
        }

        private void CargaCatalogos()
        {
            // Paises y estados
            ComboBoxUI.ComboPaisEstado(ref ComboPais, ref ComboEstado);            
        }

        private void Button_Guardar_Click_1(object sender, RoutedEventArgs e)
        {
            if (TextBox_NombreUsuario.Text.Equals("admin"))
            {
                MessageBox.Show("Ya existe un registro con ese nombre, favor de verificar."); return;
            }

            bool IsValid = true;
            string msg = "";

            if (!((bool)CheckBox_Ventas.IsChecked) && !((bool)CheckBox_Compras.IsChecked) && !((bool)CheckBox_Inventarios.IsChecked) && !((bool)CheckBox_Bancos.IsChecked) && !((bool)CheckBox_CapitalHumano.IsChecked) && !((bool)CheckBox_CRM.IsChecked) && !((bool)CheckBox_Informes.IsChecked) && !((bool)CheckBox_Configuracion.IsChecked) && Combobox_PuntoVenta.SelectedIndex == 0)
            {
                msg = "Favor de asignar al menos un Rol al usuario.";
                IsValid = false;
            }

            if (!TextBoxPassword.Password.Equals(TextBoxPassword_Validation.Password))
            {
                msg = "Las Contraseñas no coinciden, favor de verificar.";
                IsValid = false;
            }

            if (TextBoxPassword.Password.Length < 8)
            {
                msg = "Favor de ingresar una contraseña de al menos 8 caracteres.";
                IsValid = false;
            }

            if (String.IsNullOrEmpty(TextBoxPassword.Password))
            {
                msg = "Favor de ingresar la contraseña.";
                IsValid = false;
            }

            if (String.IsNullOrEmpty(TextBox_NombreUsuario.Text))
            {
                msg = "Favor de ingresar el Nombre de Usuario.";
                IsValid = false;
            }

            if (!FuncionesClass.IsValidEmail(TextBox_Email.Text)) 
            {
                msg = "Favor de ingresar un Email correcto.";
                IsValid = false;
            }

            if (String.IsNullOrEmpty(TextBox_Email.Text))
            {
                msg = "Favor de ingresar el Email del Usuario.";
                IsValid = false;
            }


            if (String.IsNullOrEmpty(TextBox_Nombre.Text))
            {
                msg = "Favor de ingresar el Nombre.";
                IsValid = false;
            }

            if (IsValid)
            {
                try
                {
                    dbo_Sec_Usuario s = new dbo_Sec_Usuario(_sesion.RFC, _sesion.UserName);
                    if (
                    s.Insert_Sec_Usuario(
                        TextBox_NombreUsuario.Text,
                        TextBoxPassword.Password,
                        TextBox_Nombre.Text,
                        TextBox_Telefono.Text,
                     
                        true,
                        TextBox_Email.Text,
                        TextBox_Puesto.Text,
                        (int)ComboPais.SelectedValue,
                        (int)ComboEstado.SelectedValue, 6, true
                    ).Id != 1)
                    {
                        MessageBox.Show("Error al Agregar Usuario.");
                        _tabControlPadre.Items.Remove(_tabItemPadre);
                        return;
                    }

                    int IdUsuario = s.Get_Id_Usuario(TextBox_NombreUsuario.Text);
                    //Licendia ligado al usaurio y rfc 
                    //int Dia_F = DateTime.Now.Day;
                    //DateTime Fecha_F = new DateTime();

                    //if (Dia_F > 28)
                    //{
                    //    Dia_F = 2;
                    //    Fecha_F = new DateTime(DateTime.Now.AddMonths(2).Year, DateTime.Now.AddMonths(2).Month, 2, 23, 59, 59);
                    //}
                    //else
                    //{
                    //    int anio = 0;
                    //    int mes = 0;
                    //    int dia = 0;

                    //    anio = DateTime.Now.Year;
                    //    mes = DateTime.Now.Month;
                    //    dia = DateTime.Now.Day;

                    //    Fecha_F = new DateTime(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, DateTime.Now.Day, 23, 59, 59);
                    //}
                    dbo_Sec_Usuario_RFC.Insert_Sec_Usuario_RFC(s.Get_Id_Usuario(TextBox_NombreUsuario.Text).ToString(), this._sesion.RFC, DateTime.Now, TextBox_NombreUsuario.Text, "Mensual",0);
              
                    //Menus
                    dbo_Sec_MenuUser z = new dbo_Sec_MenuUser();

                    if ((bool)CheckBox_Ventas.IsChecked)
                        z.Insert_Sec_MenuUser(10, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(10, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_Inventarios.IsChecked)
                        z.Insert_Sec_MenuUser(20, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(20, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_CapitalHumano.IsChecked)
                        z.Insert_Sec_MenuUser(30, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(30, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_Configuracion.IsChecked)
                        z.Insert_Sec_MenuUser(40, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(40, _sesion.RFC, IdUsuario, false);

                    z.Insert_Sec_MenuUser(50, _sesion.RFC, IdUsuario, true);

                    if ((bool)CheckBox_Compras.IsChecked)
                        z.Insert_Sec_MenuUser(60, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(60, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_Bancos.IsChecked)
                        z.Insert_Sec_MenuUser(70, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(70, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_CRM.IsChecked)
                        z.Insert_Sec_MenuUser(80, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(80, _sesion.RFC, IdUsuario, false);

                    if ((bool)CheckBox_Informes.IsChecked)
                        z.Insert_Sec_MenuUser(90, _sesion.RFC, IdUsuario, true);
                    else
                        z.Insert_Sec_MenuUser(90, _sesion.RFC, IdUsuario, false);

                    if (Combobox_PuntoVenta.SelectedValue.Equals("1"))
                        z.Insert_Sec_MenuUser(100, _sesion.RFC, IdUsuario, false);
                    else
                        z.Insert_Sec_MenuUser(100, _sesion.RFC, IdUsuario, true);

                    dbo_Sec_Usuario_PV aa = new dbo_Sec_Usuario_PV();
                    aa.Insert_Sec_Usuario_PV(IdUsuario, Combobox_PuntoVenta.SelectedIndex + 1);

                    MessageBox.Show("Usuario Agregado Correctamente.");
                    _tabControlPadre.Items.Remove(_tabItemPadre);
                }
                catch (Exception)
                {
                    MessageBox.Show("Error al Agregar Usuario.");
                    _tabControlPadre.Items.Remove(_tabItemPadre);
                }
            }
            else
            {
                MessageBox.Show(msg);
            }
        }

        private void ComboPais_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (ComboPais.SelectedValue != null)
                ComboBoxUI.ComboPaisEstado(ref ComboPais, ref ComboEstado, (int)ComboPais.SelectedValue, 1);            
        }

        private void TextBox_NombreUsuario_TextChanged_1(object sender, TextChangedEventArgs e)
        {
            string final = "";
             
            foreach(char c in TextBox_NombreUsuario.Text){

                if (((int)c >= (int)'A' && (int)c <= (int)'Z') || ((int)c >= (int)'a' && (int)c <= (int)'z') || ((int)c >= (int)'0' && (int)c <= (int)'9')) 
                {
                    final += c.ToString();
                }
            }

            TextBox_NombreUsuario.Text = final;
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("Usuarios.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }
    }
}
